package com.mujin.keji.collectionsystem.utils.ImageLoader.base;

import android.content.Context;
import android.widget.ImageView;

import com.mujin.keji.collectionsystem.utils.ImageLoader.glide.GlideConfig;
import com.mujin.keji.collectionsystem.utils.ImageLoader.glide.GliderLoader;


/**
 * @author 作者：LHC
 * @date 创建时间：2017/9/1
 * @corporation 公司：anerfa
 * @desception 图片加载分发，会根据配置的config和loader进行选择分发调用对应的loader的加载图片方式
 * 默认使用glide加载
 * 当使用默认配置信息时，需要传入Context，图片路径（String）,ImageView对象
 * 若使用到自定义的配置信息，会覆盖默认配置信息中相同功能的配置参数
 * <p>
 * 基本用法示例：
 * <pre>
 * ImageRouter.getInstance()
 * .with(MainActivity.this)
 * .path(path)
 * .target(iv)
 * .loadImage();
 * </pre>
 * <p>
 * <p>
 * 自定义配置参数用法
 * <pre>
 * GliderLoader loader = new GliderLoader();
 * GlideConfig config = new GlideConfig()
 * .setImagePath(url)
 * .setStrategy(DiskCacheStrategy.SOURCE);
 * ImageRouter.getInstance()
 * .config(config)
 * .loader(loader)
 * .with(MainActivity.this)
 * .path(url)
 * .target(iv)
 * .loadImage();
 * </pre>
 */

public class ImageRouter {
    private static final ImageRouter ourInstance = new ImageRouter();
    private static ILoader loader;
    private static BaseLoaderConfig config;
    
    public static ImageRouter getInstance() {
        config = new GlideConfig();
        loader = new GliderLoader();
        return ourInstance;
    }
    
    private ImageRouter() {
    }
    
    /**
     * 初始化loader对象
     * 不调用此方法就使用默认loader对象
     * 若调用init（）方法，则必须调用config()方法
     *
     * @param loader
     * @return
     */
    public ImageRouter loader(ILoader loader) {
        this.loader = loader;
        return this;
    }
    
    /**
     * 加载配置信息
     * 不调用此方法就使用默认的配置信息
     * 若调用init（）方法，则必须调用config()方法
     *
     * @param config
     * @return
     */
    public ImageRouter config(BaseLoaderConfig config) {
        this.config = config;
        return this;
    }
    
    public void loadImage() {
        if (config.getContext() == null || config.getImageView() == null) {
            throw new IllegalArgumentException("you must call loader() and config() first");
        }
        loader.setConfig(config);
        loader.init();
        loader.loadImage();
    }
    
    public ImageRouter clearMemCache() {
        loader.setConfig(config);
        loader.clearMemCache();
        return this;
    }
    
    public ImageRouter clearSdCache() {
        loader.setConfig(config);
        loader.clearSdCache();
        return this;
    }
    
    public ImageRouter clearAllCache() {
        loader.setConfig(config);
        loader.clearAllCache();
        return this;
    }
    
    public ImageRouter path(String url) {
        if (config.getImagePath() == null) {
            config.setImagePath(url);
        }
        return this;
    }
    
    public ImageRouter target(ImageView view) {
        if (config.getImageView() == null) {
            config.setImageView(view);
        }
        return this;
    }
    
    public ImageRouter with(Context context) {
        if (config.getContext() == null) {
            config.setContext(context);
        }
        return this;
    }
}
